#include <jni.h>
#include <stdio.h>
#include "com_buddy_jni_demo04_JNIString.h"

//JNI定义了jstring类型应对java的String类型。声明中的最后一个参数jstring就是来自Java代码中的String参数，同时，返回值也是一个jstring类型。
JNIEXPORT jstring JNICALL Java_com_buddy_jni_demo04_JNIString_sayHello(JNIEnv *env, jobject thisObj, jstring inJNIStr) {
   // Step 1: Convert the JNI String (jstring) into C-String (char*)
   // 因为java的String是一个对象，而C的string是一个NULL结尾的char数组。因此，我们需要将Java的String对象转换成C的字符串表示形式：char *
   const char *inCStr = (*env)->GetStringUTFChars(env, inJNIStr, NULL);
   //GetStringUTFChars()函数可以将jstring转成char *，这个函数会返回NULL，如果系统的内容分配失败的话。因此，好的做法是检查这个函数的返回是不是NULL
   if (NULL == inCStr) return NULL;

   // Step 2: Perform its intended operations
   printf("In C, the received string is: %s\n", inCStr);
   (*env)->ReleaseStringUTFChars(env, inJNIStr, inCStr);  // release resources

   // Prompt user for a C-string
   char outCStr[128];
   printf("Enter a String: ");
   scanf("%s", outCStr);    // not more than 127 characters

   // Step 3: Convert the C-string (char*) into JNI String (jstring) and return
   return (*env)->NewStringUTF(env, outCStr);
}
// gcc -fPIC --shared JNIString.c -o libjni_string.so -I /usr/local/java/jdk-9.0.1/include
// cp libjni_string.so /home/boyun/install/idea-IU-172.4343.14/bin/
